Go言語のType Parameter
Proposal
Go Type Parameters Proposal
tenntennさん解説 https://tenntenn.dev/ja/posts/2020-12-25-goadvent/
Background/Context
なぜGo言語にgenericsが必要なのか
parametric polymorphism
Abstract
Go言語にオプショナルな型パラメタを導入する。これは型宣言や関数宣言で用いることができる。
型パラメタはインタフェースで制約される。→型制約
インタフェース型が型制約として用いられるときは、その型に代入可能な型のリストを含めることができる。 →Type List
unification algorithmによる型推論により、多くの関数呼び出しにおいては型引数を省略できる。
このproposalはGo1と完全に後方互換性がある。
Overview
func F[T any](p T) { ... }
type M[T any] []T
func F[T Constraint](p T) { ... }
Constraint = InterfaceType
事前宣言された識別子any はどんな型も許す型制約
Generic functionは型制約で許された演算しかできない
Generic functionやGeneric typeを使うときには型パラメータが必要
ただし型パラメータは型推論が効くときは省略できる
用語
Type parameter
Type List
関連→Type Set
Go言語におけるGenericsは、型パラメータを受け取る関数または型のことである
Type List
Type Set
Type Parameter練習コード